from openai import OpenAI
from swarm import Agent
from system_module.agents_instructions import triage_instructions
from system_module.isg_instructions import analysis_instructions, store_origin_chatlog, add_record_to_json
from system_module.file_operations import load_json_file, add_record_to_json
from system_module.qdrant_operations import query_docs,milvus_search
from system_module.utilities import Evoke_hot_spot_analysis_capabilities
from system_module.run_demo import run_demo_loop,run_demo_loop_with_voice
client = OpenAI(api_key='sk-feebadbcb5654f5c8f9044c78f7c4548',
                base_url="https://dashscope.aliyuncs.com/compatible-mode/v1")

file_path = 'D:/robotlearn/agent/Customs_agent_assistant/data/system_data/Keyword statistics.json'
context_variables = load_json_file(file_path)

# 定义一个函数用于将请求转移到分诊智能体
def transfer_to_triage():
    """当用户的请求需要转移到不同的智能体或不同的政策时，调用此函数。
    例如，当用户询问的内容不属于当前智能体处理范围时，调用此函数进行转移。
    """
    return triage_agent

# 定义一个函数用于将请求转移到报关记录查询智能体
def transfer_to_customs_record_query():
    """当用户的请求需要转移到报关记录查询智能体时，调用此函数。
    例如，当用户查询报关记录时，调用此函数进行转移。
    """
    return customs_record_query_agent


# 定义一个函数用于将请求转移到对话分析智能体
def transfer_to_Conversation_analytics():
    """当用户的请求已经确认结束后，需要转移到对话分析智能体来更新关键词信息，调用此函数。
    """
    return Conversation_analytics_agent

def transfer_to_hot_spot_analysis_agent():
    """当用户的请求需要转移到热点分析智能体时，调用此函数。
    """
    return Hot_spot_analysis_agent

def transfer_to_customs_knowledge_query_agent():
    """当用户的请求需要转移到海关知识查询智能体时，调用此函数。
    """
    return customs_knowledge_query_agent



triage_agent = Agent(
    name="Triage Agent",
    model="qwen-max-0919",  # 智能体名称：分诊智能体
    instructions=triage_instructions,  # 调用分诊指令，根据上下文帮助处理
    functions=[transfer_to_customs_record_query,
    transfer_to_hot_spot_analysis_agent,
    transfer_to_customs_knowledge_query_agent,
    ],  # 定义可调用的函数，分别转移到航班修改和行李丢失
)

customs_record_query_agent = Agent(
    name='Customs_Record_Query',
    model="qwen-max-0919",
    instructions="""
        你是中国海关12360热线的一名报关记录查询智能体。
        1.请询问用户想要查询的海关报关记录的关键词，并调用query_docs进行查询。
        2.如果用户的请求需要转移到不同的智能体或不同的政策时，调用transfer_to_triage函数。
        3.如果客户没有进一步问题，调用 'transfer_to_Conversation_analytics' 函数。
    """,
    functions=[query_docs,transfer_to_triage,transfer_to_Conversation_analytics],
)

customs_knowledge_query_agent = Agent(
    name='Customs_Knowledge_Query',
    model="qwen-max-0919",
    instructions="""
        你是中国海关12360热线的一名报关知识查询智能体。
        1.请询问用户想要查询的海关报关知识的问题，并作为query输入到milvus_search函数进行查询。
        2.如果用户的请求需要转移到不同的智能体或不同的政策时，调用transfer_to_triage函数。
        3.如果客户没有进一步问题，调用 'transfer_to_Conversation_analytics' 函数。
    """,
    functions=[milvus_search,transfer_to_triage,transfer_to_Conversation_analytics],
)

Conversation_analytics_agent = Agent(
    name="Conversation analytics",
    model = "qwen-max-0919",
    instructions=analysis_instructions,
    functions=[add_record_to_json,store_origin_chatlog,transfer_to_triage]
)

Hot_spot_analysis_agent = Agent(
    name="Hot spot analysis",
    model="qwen-max-0919",
    instructions="""
        你是中国海关12360热线的一名热点分析智能体。
        1.请询问用户是否确定要进行热点分析，如果得到用户的肯定回复，就调用Evoke_hot_spot_analysis_capabilities函数唤起功能。
        2.如果客户没有进一步问题，调用 'transfer_to_Conversation_analytics' 函数
        3.如果用户的请求需要转移到不同的智能体或不同的政策时，调用transfer_to_triage函数。
        注意：不要进行多余的输出，你只需要负责判断是否调用该函数。
    """,
    functions=[Evoke_hot_spot_analysis_capabilities,transfer_to_Conversation_analytics,transfer_to_triage]
)



if __name__ == "__main__":
    run_demo_loop(openai_client=client,
                  starting_agent=triage_agent,
                  context_variables=context_variables,
                  debug=False)